Ext.define('Egitim.controller.ProjeCtrl', {
	extend: 'Ext.app.Controller',
	views: ['proje.ProjeTabpanel', 'proje.ProjeKatilimciPanel', 'proje.ProjeForm', 
	        'proje.ProjeList', 'proje.ProjeEgitimContainer',
	        'proje.ProjeGrupProgramContainer'],
	stores: ['Proje'],
	models: ['Proje', 'Egitim.model.EventModel', 'Ext.calendar.data.EventModel'],
	refs: [{
		ref: 'projeEgitimView',
		selector: 'projeegitimview'
	}, {
		ref: 'projeTabPanel',
		selector: 'projetabpanel'
	}, {
		ref: 'katilimciListGrupAdi',
		selector: 'katilimcilist #grupadi'
	}, {
		ref: 'katilimciList',
		selector: 'katilimcilist'
	}, {
		ref: 'katilimciForm',
		selector: 'katilimciform'
	}, {
		ref: 'projeGrupView',
		selector: 'projegrupview'
	}, {
		ref: 'projeGrupProgramContainer',
		selector: 'projegrupprogramcontainer'
	}, {
		ref: 'projeList',
		selector: 'projelist'
	}],
	init: function() {

		this.control({
			'projeform button[action=tamam]': {
				click: this.onTamamProje
			},
			'projelist': {
				afterrender: this.onProjeListListAfterRender,
				silproje: this.onSilProje,
				guncelleproje: this.onGuncelleProje
			},
			'projelist #search': {
				specialkey: this.onProjeListSearch
			},
			'projeform': {
				afterrender: this.onGosterProjeForm
			},
			'egitimlist': {
				secildi: this.onEgitimSecildi
			},
			'projeegitimpanel button[action=sil]': {
				click: this.onSilEgitim
			},
			'projeegitimpanel button[action=tamam]': {
				click: this.onTamamEgitim
			},
			
			'projeegitimbilgilericontainer #egitmen': {
				select: this.onSecildiEgitmen
			},
			'katilimcilist button[action=grupla]': {
				click: this.onGrupla
			},
			'katilimcilist button[action=aktif]': {
				click: this.onKatilimciOnayDegistir
			},
			'katilimcilist button[action=pasif]': {
				click: this.onKatilimciOnayDegistir
			},
			'katilimcilist #grupadi': {
				specialkey: this.onGrupla
			},
			'katilimcilist': {
				guncellekatilimci: this.onSecildiKatilimci,
				afterrender: this.onGosterKatilimciList
			},
			'projeegitimview': {
				afterrender: function (view){
					view.getStore().load({
						params: {
							id: view.up('tabpanel').getProjeId()
						}
					});
				}
			},
			'projegrupview': {
				afterrender: function (view){
					view.getStore().load({
						params: {
							id: view.projeId
						}
					});
				},
				select: this.onSecildiProjeGrup
			},
			'projegrupprogramcontainer button[action=yenievent]': {
				click: this.onYeniGrupProgramEvent
			},
			'projegrupprogramcontainer button[action=tazele]': {
				click: function (){
					this.calPanelReset();
				}
			},
			'grupprogrameventform button[action=tamam]': {
				click: this.onTamamGrupProgramEventForm
			},
			'calendarpanel': {
				dayclick: function(vw, dt, ad, el){
					if (YETKI.isProjeGrupEventAuth()) {
	                    this.showEditWindow({
	                        StartDate: dt,
	                        IsAllDay: ad
	                    }, el);
	                    //this.clearMsg();						
					}
                },
                eventclick: function(vw, rec, el){
                    this.showEditWindow(rec, el);
                }
			}
		});
	},
	
	onKatilimciOnayDegistir: function (but) {
		var katilimciList = this.getKatilimciList(),
			onay = but.action === 'aktif' ? true : false,
			katilimciIds = this.getSelectedKatilimcis();

		if (Ext.isEmpty(katilimciIds)) {
			return;
		}
		
		Egitim.lib.Utility.ajaxRequest ({
			url: 'katilimcis/onayDegistir',
			params: {
				onay: onay,
				katilimciIds: katilimciIds
			},
			successFn: function (){
				katilimciList.getSelectionModel().deselectAll();
				katilimciList.getStore().load();
			}
		});
	},
	
	onGosterKatilimciList: function () {
		this.getKatilimciList().getStore().load();
	},
	
	calPanelReset: function (baslik){
		var calPanel = this.getProjeGrupProgramContainer().down('#calendarpanel');
		calPanel.setTitle('Takvim' + (Ext.isEmpty(baslik) ? '': ' [' + baslik + ']'));
		calPanel.eventStore.removeAll();
	},
	
	onSecildiProjeGrup: function (view, record, eOpts) {
		var me = this;
		var calPanel = this.getProjeGrupProgramContainer().down('#calendarpanel');
		var projeGrupProgramContainer = this.getProjeGrupProgramContainer();
		calPanel.getEl().mask('Yükleniyor...');
		var store = Ext.create('Egitim.store.GrupProgramEventStore').load({
			params: {
				projeId: projeGrupProgramContainer.projeId,
	        	grup: record.get('id')
			},
			callback: function(records, operation, success) {
				me.calPanelReset(record.get('baslik'));
				for ( var i = 0; i < records.length; i++) {
					var rec = records[i];
					calPanel.eventStore.add(rec.makeEventData());
				}
				calPanel.getEl().unmask();
		    }
		})
	},
	
	showEditWindow : function(rec, animateTarget){
		debugger;
		//var projeId = this.getProjeTabPanel().projeId;
		var projeId = this.getProjeGrupProgramContainer().projeId;
		var selections = this.getProjeGrupView().getSelectionModel().getSelection();
		if (!selections || selections.length == 0) {
			Egitim.lib.Utility.warnMessage('Grup seçiniz');
			return;
		}
		var grup = selections[0].get('id');

		var form = Ext.widget('grupprogrameventform', {
			readonly: !YETKI.isProjeGrupEventAuth(),
			title: '',
			grup: grup,
			projeId: projeId,
			border: false
		});
		var eventModel = null;
		if (rec && rec.data && rec.data.recordData) {
			eventModel = new Egitim.model.EventModel(rec.data.recordData);			
		} else {
			var minutes = rec.StartDate.getMinutes() + "";
			var hour = rec.StartDate.getHours() + "";
			//alert(hour + ':' + minutes);
			var eventModel = new Egitim.model.EventModel({
				bas_tarihi: rec.StartDate,
				bas_saati: (hour.length == 2 ? hour : '0'+ hour)  + ':' + (minutes.length == 2 ? minutes : '0'+ minutes),
				grup: grup,
				proje_id: projeId
			});
		}
		Ext.create('Ext.window.Window', {
			title: Ext.String.format('Event [{0}]', Ext.isEmpty(eventModel.get('id')) ? 'Yeni' : eventModel.get('id')),
			modal: false,
			height: 300,
			width: 500,
			modal: true,
			layout: 'fit',
			maximizable: false,
			items: [form]
		}).show();
		
		form.getMessageLabel().setText ('İşlem yapılıyor...');
		form.getForm().findField('egitim_id').getStore().load({
			callback: function (){
				form.getMessageLabel().setText ('');
				form.getForm().loadRecord(eventModel);
				form.getForm().findField('renk').setValue(eventModel.get('renk'));
			}
		})
    },
   
	onTamamGrupProgramEventForm: function (but) {
		var formPanel = but.up('form'),
			form = formPanel.getForm();
		/*
			id = form.findField('id').getValue(),
			cid = form.findField('renk').getValue(),
			basValue = form.findField('bas_tarihi').getValue(),
			bitValue = form.findField('bit_tarihi').getValue();
		*/
		
		var calPanel = this.getProjeGrupProgramContainer().down('#calendarpanel');
		if (form.isValid()) {
			form.submit({
				success: function(form, action) {
					formPanel.showMessage (1, action.result.msg);
					var rec = new Egitim.model.EventModel(Ext.applyIf({
						id: action.result.grupProgramEventId
					}, form.getValues()));
			        calPanel.eventStore.add(rec.makeEventData());
				},
				failure: function(form, action) {
					formPanel.showMessage (0, action.result.msg);
				}
			});
		}		
	},
	
	onYeniGrupProgramEvent: function (but){
		var projeId = this.getProjeTabPanel().projeId;
		var selections = this.getProjeGrupView().getSelectionModel().getSelection();
		if (!selections || selections.length == 0) {
			Egitim.lib.Utility.warnMessage('Grup seçiniz');
			return;
		}
		var grup = selections[0].get('id');
		
		Ext.create('Ext.window.Window', {
			title: Ext.String.format('Event [{0}]', 'Yeni'),
			modal: true,
			height: 300,
			width: 500,
			layout: 'fit',
			maximizable: false,
			items: {
				xtype: 'grupprogrameventform',
				projeId: projeId,
				readonly: !YETKI.isAdmin(), //FIXME admin dışındakiler için true olacak
				title: '',
				projeId: projeId,
				grup: grup,
				border: false,
				listeners: {
					afterrender: function (form) {
						form.getForm().findField('renk').setValue(1);
					}
				}
			}
		}).show();
		
	},
	
	onSecildiKatilimci: function (grid, rec) {
		this.getKatilimciForm().loadRecord(rec);
	},
	
	onGrupla: function () {
		var grupAdiComp = this.getKatilimciListGrupAdi(),
			katilimciList = this.getKatilimciList(),
			secilenler = katilimciList.getSelectionModel().getSelection(),
			grupAdi = grupAdiComp.getValue(),
			projeId = this.getProjeTabPanel().getProjeId();
		
		var katilimciIds = this.getSelectedKatilimcis();
		if (Ext.isEmpty(katilimciIds)) {
			return;
		}
		
		if (!Ext.isIE) {
			console.log ("Grupla: " + grupAdi + ' ' + secilenler.length);
		}
		Egitim.lib.Utility.ajaxRequest({
			url: 'projes/grupla',
			params: {
				grupAdi: grupAdi,
				projeId: projeId,
				katilimciIds: katilimciIds
			},
			successFn: function (){
				katilimciList.getSelectionModel().deselectAll();
				katilimciList.getStore().load();
			}
		})
	},
	
	/**
	 * Seçilen katılımcı listesini 1,2,3, şeklinde döner<br>
	 * Hiç seçilmediği durumda "" döner
	 */
	getSelectedKatilimcis: function () {
		var katilimciIds = "",
			katilimciList = this.getKatilimciList(),
			secilenler = katilimciList.getSelectionModel().getSelection();
		
		for ( var i = 0; i < secilenler.length; i++) {
			var kat = secilenler[i];
			katilimciIds += kat.get('id') + ',';
		}
		return katilimciIds;
		
	},
	
	onSecildiEgitim: function () {
		
	},
	
	onSilEgitim: function (){
		var view = this.getProjeEgitimView(),
			st = view.getStore(),
			selections = view.getSelectionModel().getSelection();
		if (Ext.isEmpty(selections)) {
			return;
		}
		st.remove(selections);
	},
	
	/**
	 * Projenin önceden kaydedilmiş olması gerekir, projeId dolu olmalı
	 */
	onTamamEgitim: function (){
		var view = this.getProjeEgitimView(),
			st = view.getStore();
			models = st.getRange(0, st.getCount()),
			projeId = this.getProjeTabPanel().projeId;
	
		if (Ext.isEmpty(projeId)) {
			Egitim.lib.Utility.errorMessage('Önce Proje kaydını yapmanız gerekir. Proje id boş.');
			return;
		}
		
		if (!Ext.isIE) {
			console.log(models.length + ' eğitim,' + projeId + ' idli proje için kaydedilecek');
		}
		var egitimIds = '', 
			egitmenIds = '';
		for ( var i = 0; i < models.length; i++) {
			var model = models[i];
			egitimIds += model.get('id') + ',';
			egitmenIds += (Ext.isEmpty(model.get('egitmen_id')) ? 0 : model.get('egitmen_id')) + ',';
		}

		Egitim.lib.Utility.ajaxRequest({
			url: 'projes/saveEgitim',
			method: 'POST',
			params: {
				projeId: projeId,
				egitimIds: egitimIds,
				egitmenIds: egitmenIds //olmayanlar için '' gider
			}
		});
	},
	
	onEgitimSecildi: function (grid, rec) {
		this.getProjeEgitimView().getStore().add({
			src: 'egitimapp/resources/images/egitim_big.png', 
			baslik: rec.get('baslik'), 
			id: rec.get('id')
		});
	},
	
	onGosterProjeForm: function (projeForm) {
		var tabpanel = projeForm.up('tabpanel'),
			projeId = projeForm.up('tabpanel').getProjeId();
		
		tabpanel.fireEvent('yuklendi', projeId);
		//projeForm.projeId = projeId;
		
		if (!Ext.isEmpty(projeId)) {
			projeForm.load({
				waitMsg: 'Yükleniyor',
				url: 'projes/load/' + projeId,
				method: 'POST'
			});
		}
	},
	
	onProjeListListAfterRender: function (){
		this.getProjeStore().load();
	},
	
	onTamamProje: function (but) {
		var formPanel = but.up('form'),
			form = formPanel.getForm(),
			projeList = this.getProjeList();
		
		if (form.isValid()) {
			form.submit({
				success: function(form, action) {
					var msg = action.result.msg;
					var projeId = action.result.projeId;
					formPanel.up('tabpanel').fireEvent('yuklendi', projeId);
					formPanel.showMessage (1, msg);
					Egitim.lib.Utility.infoMessage(msg, function () {
						formPanel.up('window').close();
					});
					projeList.getStore().load();
				},
				failure: function(form, action) {
					formPanel.showMessage (0, action.result.msg);
				}
			});
		}		
	},
	
	onProjeListSearch: function (field, e){
		if (e.getKey() == e.ENTER) {
			var form = field.up('form').getForm();
			this.getProjeStore().load({
				params: form.getValues()
			});
		}
	},
	
	onSilProje: function (grid, record) {
		var projeId = record.get('id'),
			text = record.get('baslik'),
			me = this;
		
		Ext.Msg.confirm('Onay', text + ' Silinecek. Onaylıyor musunuz?', function(button) {
		    if (button === 'yes') {
		    	Egitim.lib.Utility.ajaxRequest({
					url: 'projes/delete/' + projeId,
					successFn: function () {
						me.getProjeStore().load();
					}
				});
		    }
		});
	},
	
	onGuncelleProje: function (grid, record) {
		var projeId = record.get('id'),
			kod = record.get('kod');
		Ext.create('Ext.window.Window', {
			title: Ext.String.format('Proje [{0}] [{1}]', projeId, kod),
			modal: true,
			height: 500,
			width: 600,
			layout: 'fit',
			maximized: true,
			maximizable: true,
			items: {
				xtype: 'projetabpanel',
				projeId: projeId,
				title: '',
				border: false
			}
		}).show();
	}
	
});